# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/13 14:37 
@Author  : ZhangShenao 
@File    : obj_reference_count.py 
@Desc    : 对象引用计数

使用sys.getrefcount()函数,可以查看一个对象被引用的次数
ys.getrefcount()函数并不是统计一个指针(变量),而是统计这个指针(变量)所指向的对象的引用次数

getrefcount()函数本身也会引入一次计数

在函数调用发生的时候,会产生额外的两次引用,一次来自函数栈,另一个是函数参数
"""
import sys


def print_reference_count():
    """打印对象的引用计数"""

    a = []
    print(f'reference count of a: {sys.getrefcount(a)}')  # 2次 声明a本身+getrefcount函数引用

    b = a
    print(f'reference count of a: {sys.getrefcount(a)}')  # 3次

    c = b
    d = b
    e = c
    f = e
    g = d
    # 因为getrefcount函数统计的是对象的引用次数,而a~g都是指向的同一个对象,所以引用次数为8次
    print(f'reference count of a: {sys.getrefcount(a)}')  # 8次


if __name__ == '__main__':
    print_reference_count()
